
/**
 * 版权所有:版权所有(C) 2020，卓信科技
 * 系统名称:pms-项目管理系统
 * 文件名称:UserController.java
 * 模块名称:员工登录
 * 创建日期:2020年5月8日
 * 作        者:sunlq
 * 内容摘要:员工登录相关
 */
package com.zx.emanage.user.web;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.zx.emanage.user.service.ILoginManageService;
import com.zx.emanage.user.service.IUserService;
import com.zx.emanage.user.vo.PmPersonnel;
import com.zx.emanage.user.vo.UserInfo;
import com.zx.emanage.util.gen.GlobalVal;
import com.zx.emanage.util.gen.ResultBean;
import com.zx.emanage.util.gen.ResultHelper;

/**
 * 类  名  称:UserController
 * 内容摘要:员工登录相关
 * 作        者:sunlq
 */
@Controller
@RequestMapping("/user")
public class UserController
{
    @Autowired
    private ILoginManageService loginManageService;

    @Autowired
    IUserService userService;

    /**
     * 方法名称: login
     * 内容摘要: 用户登录
     * @param map
     * @return 
     * @author: sunlq
     * @time:2020年5月8日 下午2:09:07
     */
    @RequestMapping(value = "/login", method = { RequestMethod.POST })
    @ResponseBody
    public ResultBean<UserInfo> login(@RequestBody Map<String, Object> map)
    {
        // 用户名
        String username = map.get("username").toString();
        // 密码
        String password = map.get("password").toString();

        // 创建用户令牌
        String token = GlobalVal.getUUID();

        // 登录验证
        String error = loginManageService.checkAndGetUser(username, password, token);

        // 验证通过
        if (StringUtils.isBlank(error))
        {
            // 返回用户令牌
            UserInfo userInfo = new UserInfo();
            userInfo.setToken(token);

            return ResultHelper.getSuccess(userInfo);
        }
        // 验证未通过
        else
        {
            return ResultHelper.getError(error, null);
        }
    }

    /**
     * 方法名称: info
     * 内容摘要: 前端取用户信息和角色菜单
     * @param session
     * @param token
     * @return 
     * @author: sunlq
     * @time:2020年5月8日 下午2:53:09
     */
    @RequestMapping(value = "/info", method = { RequestMethod.GET })
    @ResponseBody
    public ResultBean<UserInfo> info(@RequestParam String token)
    {
        // 根据令牌取缓存的用户信息
        UserInfo userInfo = loginManageService.getUserInfo(token);

        return ResultHelper.getSuccess(userInfo);
    }

    /**
     * 方法名称: logout
     * 内容摘要: 用户退出
     * @param request
     * @param session
     * @return 
     * @author: sunlq
     * @time:2020年5月8日 下午4:58:36
     */
    @RequestMapping(value = "/logout", method = { RequestMethod.POST })
    @ResponseBody
    public ResultBean<String> logout(HttpServletRequest request, HttpSession session)
    {
        // 用户令牌
        String token = request.getHeader(GlobalVal.XTOKEN);
		System.out.println("logout_start:" + new Timestamp(System.currentTimeMillis()));
        // 有令牌
        if (token != null)
        {
            // 删除缓存的用户信息
            userService.deletePmPersonnel(token);
        }
		System.out.println("logout_end:" + new Timestamp(System.currentTimeMillis()));
        return ResultHelper.getSuccess(null);
    }
    
    /**
     * 方法名称: getUserInfo
     * 内容摘要: 获取用户信息
     * @param session
     * @param token
     * @return 
     * @author: wangyihan
     * @time:2020年8月3日 下午2:53:09
     */
    @RequestMapping(value = "/getUserInfo.do", method = { RequestMethod.GET })
    @ResponseBody
    public Map<String, Object> getUserInfo(HttpServletRequest request)
    {
    	PmPersonnel personnel = userService.getPmPersonnel(request.getHeader(GlobalVal.XTOKEN));
    	Map<String, Object> resMap = new HashMap<String, Object>();
    	resMap.put("user", personnel);
    	Date date = new Date();
    	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    	resMap.put("now_date", format.format(date));
        return ResultHelper.getSuccessReturnData(resMap);
    }
    
    

}
